<?php
/**
 * Todas las controladores heredan de esta clase en un nivel superior
 * por lo tanto los metodos aqui definidos estan disponibles para
 * cualquier controlador.
 *
 * @category Kumbia
 * @package Controller
 **/

// @see Controller nuevo controller
require_once CORE_PATH . 'kumbia/controller.php';

class AppController extends Controller
{
	public $acl; 			// Lista de control de accesos a los grupos de usuarios
	public $typeUser = "3";	// Tipo de usuario (0 - Superadmin, 1 - Admin, 2 - User registered, 3 - Public user)
						// Por defecto 3
	
	public $em;			// Almacena el objeto messageEmail, encargado de construir los mensajes para enviar por correo
	public $mail;			// Almacena el objeto phpMailer para enviar correos
	public $users;			// Almacena el objeto del modelo Users
	
	public $nameApp;		// Nombre de la aplicación, la cual se encuentra en el atributo "name" del archivo config.ini
	public $domainApp;		// Dominio de la aplicación, el cual se encuentra en el atributo "domain" del archivo config.ini
	public $charsetApp;		// Codificación de la aplicación, la cual se encuentra en el atributo "charset" del archivo config.ini
	
	// Constructor de la aplicación y de los controller
	final protected function initialize()
	{
		Load::lib("secureimage");
		Load::lib("phpmailer");
		Language::setLanguage(":es");
		
		$config = Config::read('config');
		
		$this->nameApp = $config['application']['name'];
		$this->domainApp = $config['application']['domain'];
		$this->charsetApp = $config['application']['charset'];
		
		// Instanciamos un objeto de clase messageEmail (clase con los mensajes)
		$this->em = new Messageemail($this->nameApp, $this->domainApp);
		
		// Si ya ha iniciado sesión, no puede ingresar al registro
		if(Auth::is_valid() && ($this->controller_name == "register"))
			$this->redirect("");
		
		// Si cumple la condición, cargue el modelo de usuarios
		if (in_array($this->controller_name, array("register", "activate", "login", "profile")))
			$this->users = Load::model("users");
		
		// Lista de control de acceso para cada uno de los controllers del sistema
		$this->acl = new Acl();
		
		$this->acl->add_role(new AclRole("0")); // Super administradores
		$this->acl->add_role(new AclRole("1")); // Administradores
		$this->acl->add_role(new AclRole("2")); // Usuarios
		$this->acl->add_role(new AclRole("3")); // Visitantes
		
		$this->acl->add_resource(new AclResource("inicio"), "index");
		$this->acl->add_resource(new AclResource("login"), "index", "login", "logout");
		$this->acl->add_resource(new AclResource("profile"), "index", "image");
		$this->acl->add_resource(new AclResource("register"), "index", "register", "verify_field");
		$this->acl->add_resource(new AclResource("captcha"), "index", "check");
		$this->acl->add_resource(new AclResource("activate"), "index", "ignore");
		$this->acl->add_resource(new AclResource("articles"), "index");
		
		$this->acl->allow("2", "inicio", array("index"));
		$this->acl->allow("3", "inicio", array("index"));
		
		$this->acl->allow("2", "login", array("index", "login", "logout"));
		$this->acl->allow("3", "login", array("index", "login", "logout"));
		
		$this->acl->allow("2", "profile", array("index", "image"));
		
		$this->acl->allow("3", "register", array("index", "register", "verify_field"));
		
		$this->acl->allow("2", "captcha", array("index", "check"));
		$this->acl->allow("3", "captcha", array("index", "check"));
		
		$this->acl->allow("3", "activate", array("index", "ignore"));
		
		$this->acl->allow("2", "articles", array("index"));
		$this->acl->allow("3", "articles", array("index"));
	}
	
	protected function before_filter()
	{
		// Habilitamos el ConfigMailer para el siguiente controlador con su respectivo método
		if (($this->controller_name == "register") && ($this->action_name == "register"))
			$this->ConfigMailer();
		
		if (Auth::is_valid())
			$this->typeUser = Auth::get('typeUser');
		
		// Si no tiene los permisos para ver el controlador con su respectivo método ...
		if (!$this->acl->is_allowed($this->typeUser, $this->controller_name, $this->action_name))
		{
			Flash::error("Acceso denegado");
			$this->render(null); // No se permite visualizar la vista
		}
	}
	
	// Función que construye el objeto mail para enviar correos
	public function ConfigMailer()
	{
		$this->mail = new PHPMailer();
		$this->mail->From = "info@" . substr($this->domainApp, 3);
		$this->mail->FromName = $this->nameApp;
		$this->mail->IsHTML(true);
		$this->mail->IsSMTP();
		$this->mail->CharSet = $this->charsetApp;
		
		$this->mail->Host = "ssl://smtp.gmail.com";
		$this->mail->Port = 465;
		$this->mail->SMTPAuth = true;
		$this->mail->Username = "ctftecnologia@gmail.com";
		$this->mail->Password = "fucktorrescarlos";
	}

	final protected function finalize()
	{
	}
}